package com.test;


import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class DevFileUtil {

    /**
     * 通过文件路径直接修改文件名
     *
     * @param filePath    需要修改的文件的完整路径
     * @param newFileName 需要修改的文件的名称
     * @return
     */
    public static String fixFileName(String filePath, String newFileName) {
        String pathSeparator = File.separator;
        File f = new File(filePath);
        // 判断原文件是否存在（防止文件名冲突）
        if (!f.exists()) {
            return null;
        }
        // 文件名不能为空
        if (newFileName == null || "".equals(newFileName.trim())) {
            return null;
        }
        newFileName = newFileName.trim();
        String newFilePath = null;
        if (f.isDirectory()) { // 判断是否为文件夹
            newFilePath = filePath.substring(0, filePath.lastIndexOf(pathSeparator)) +pathSeparator + newFileName;
        } else {
            newFilePath = filePath.substring(0, filePath.lastIndexOf(pathSeparator)) + pathSeparator + newFileName;
        }
        File nf = new File(newFilePath);

        try {
            // 修改文件名
            f.renameTo(nf);
            System.out.println("OK：" + newFilePath );
        } catch (Exception err) {
            err.printStackTrace();
            return null;
        }
        return newFilePath;
    }



    /**
     * 获取某目录下所有的文件
     *
     * @param rootPath 根目录
     * @return 文件集合
     */
    public static List<File> getFileList(String rootPath) {
        try {
            List<File> fileList = new ArrayList<>();
            File file = new File(rootPath);
            if (file.isDirectory()) {
                File[] files = file.listFiles();
                if (files != null && files.length != 0) {
                    fileList.addAll(Arrays.asList(files));
                }
            }
            return fileList;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("path is err 。。。。");
        }
    }

    /**
     * 获取某目录下所有的文件
     *
     * @param rootPath 根目录
     * @return 文件集合
     */
    public static List<File> getFileListAll(String rootPath) {
        try {
            List<File> fileList = new ArrayList<>();
            File file = new File(rootPath);
            addFileList(file, fileList);
            return fileList;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("path is err 。。。。");
        }
    }

    /**
     * 递归遍历目录
     *
     * @param file     目录
     * @param fileList 文件集合
     */
    private static void addFileList(File file, List<File> fileList) {
        if (file == null) {
            return;
        }
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            if (files != null && files.length != 0) {
                for (File fi : files) {
                    addFileList(fi, fileList);
                }
            }
        } else {
            fileList.add(file);
        }
    }


}
